package cn.dwy2002.binaryhandwritingserver.service.service;


import cn.dwy2002.binaryhandwritingserver.common.Result;
import cn.dwy2002.binaryhandwritingserver.exception.ArticleNotFoundException;
import cn.dwy2002.binaryhandwritingserver.pojo.dto.ArticleDTO;
import cn.dwy2002.binaryhandwritingserver.pojo.vo.ArticleVO;

import java.util.List;

/**
 * @author 杜伟毅
 * @version 1.0
 * @since 2025/05/28
 */
public interface ArticleService {
    /**
     * 获取所有文章（未被逻辑删除的）
     *
     * @return 返回所有未被删除的文章列表
     * @since 2025/5/28 0028 22:04
     */
    Result<List<ArticleVO>> getAllArticles();

    /**
     * 根据ID获取文章详情
     *
     * @param id 文章ID
     * @return 返回对应ID的文章对象，若不存在则返回null
     * @throws ArticleNotFoundException 当文章不存在时抛出异常
     * @since 2025/5/28 0028 22:04
     */
    Result<ArticleVO> getArticleById(Long id) throws ArticleNotFoundException;

    /**
     * 创建新文章
     *
     * @param dto 要创建的文章对象
     * @return 返回创建成功的文章对象（包含生成的ID等信息）
     * @since 2025/5/28 0028 22:04
     */
    Result<Void> createArticle(ArticleDTO dto);

    /**
     * 更新文章信息
     *
     * @param dto 要修改的文章对象
     * @return 返回更新后的文章对象
     * @throws ArticleNotFoundException 当文章不存在时抛出异常
     * @since 2025/5/28 0028 22:04
     */
    Result<Void> updateArticle(ArticleDTO dto) throws ArticleNotFoundException;

    /**
     * 根据ID删除文章（逻辑删除）
     *
     * @param id 要删除的文章ID
     * @throws ArticleNotFoundException 当文章不存在时抛出异常
     * @since 2025/5/28 0028 22:04
     */
    Result<Void> deleteArticle(Long id) throws ArticleNotFoundException;
}
